package com.wg.net.server.tcp.init;

import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import com.wg.net.codec.MyDecoder;
import com.wg.net.codec.MyEncoder;
import com.wg.net.server.tcp.handle.SocketServerHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPipeline;

/**
 * Socket协议初始化处理器（负责TCP连接的处理器链初始化）
 *
 * @author 少爷123
 */
public class SocketInitializeHandler implements InitializeHandler {
    private static final Log log = LogFactory.get();

    @Override
    public void handle(ChannelHandlerContext ctx) throws Exception {
        log.debug("开始初始化Socket连接处理器链...");
        ChannelPipeline pipeline = ctx.pipeline();

        try {
            // 1. 添加协议编解码器（从配置或依赖注入获取，示例硬编码）
            pipeline.addLast("decoder", new MyDecoder());
            pipeline.addLast("encoder", new MyEncoder());

            SocketServerHandler serverHandler = new SocketServerHandler();

            // 2. 添加业务处理器（触发channelActive激活业务逻辑）
            pipeline.addLast("handler", serverHandler);

            // 3. 激活业务处理器的channelActive方法（确保在处理器链就绪后调用）
            serverHandler.channelActive(ctx.channel());
            log.info("Socket连接初始化完成，处理器链就绪");
        } catch (Exception e) {
            log.error("Socket连接初始化失败", e);
            ctx.close(); // 初始化失败时关闭连接
            throw e; // 向上抛出异常，通知上层处理
        }
    }
}